package class01;

/**
 * @ClassName class01.Code02_BubbleSort
 * @Description 冒泡排序
 * @Author zhengjiabin
 * @Date 2021/5/31 21:53
 * @Version 1.0
 **/
public class Code02_BubbleSort {

    public static void bubbleSort(int[] arr){
        if (arr == null || arr.length < 2){
            return;
        }
        for (int i = arr.length - 1; i > 0; i--) {
            for(int j = 0; j < i; j++){
                if (arr[j] > arr[j + 1]){
                    swap(arr, j, j + 1);
                }
            }
        }
    }

    //交换arr的i和j位置的值
    public static void swap(int[] arr, int i, int j){
        arr[i] ^= arr[j];
        arr[j] ^= arr[i];
        arr[i] ^= arr[j];

    }

    public static void main(String[] args) {
        // 校验样本次数
        int count = 500000;
        // 数组随机最大size
        int maxSize = 100;
        // 数组随机最大值
        int maxValue = 100;
        // 两个排序算法是否使数组完全相同的标志位
        boolean flag = true;
        for (int i = 0; i < count; i++) {
            // 生成随机数组
            int[] arr1 = Code03_InsertionSort.generateRandomArray(maxSize, maxValue);
            // copy数组arr1
            int[] arr2 = Code03_InsertionSort.copyArray(arr1);
            // arr1调用冒泡排序
            bubbleSort(arr1);
            // arr2调用系统排序
            Code03_InsertionSort.comparator(arr2);
            // 比较arr1和arr2是否完全相同
            if (!Code03_InsertionSort.isEqual(arr1, arr2)){
                flag = false;
                // 打印数组不同的arr1
                System.out.println("arr1: ");
                Code03_InsertionSort.printArray(arr1);
                // 打印数组不同的arr2
                System.out.println("arr2: ");
                Code03_InsertionSort.printArray(arr2);
                break;
            }



        }

        System.out.println(flag ? "50w次执行，冒泡排序和jdk自带排序比对都成功":"50w次执行，插入排序和jdk自带排序比对失败");


        int[] arr = Code03_InsertionSort.generateRandomArray(maxSize, maxValue);
        // 打印生成数组
        Code03_InsertionSort.printArray(arr);
        // 插入排序
        bubbleSort(arr);
        // 打印插入排序后的数组
        Code03_InsertionSort.printArray(arr);

    }
}
